Apex Security (Apex Security)

Computer Programming - এপেক্স (Apex)
348
348

Apex Security Salesforce প্ল্যাটফর্মে Apex কোডের নিরাপত্তা নিশ্চিত করার জন্য বিভিন্ন কৌশল এবং নিয়মাবলি সংরক্ষণ করে। Apex Security ডেটার সুরক্ষা, ব্যবহারকারীর অ্যাক্সেস নিয়ন্ত্রণ, এবং কোডের কার্যক্ষমতা নির্ভরযোগ্য করার জন্য গুরুত্বপূর্ণ ভূমিকা পালন করে। Salesforce-এ ডেটা সুরক্ষা এবং এক্সেস নিয়ন্ত্রণ নিশ্চিত করতে শেয়ারিং রুলস, ফিল্ড-লেভেল সিকিউরিটি, ইনপুট ভ্যালিডেশন ইত্যাদি ব্যবহৃত হয়।


Apex Security এর প্রধান উপাদান

  1. Sharing Rules এবং Apex Sharing: ডেটা অ্যাক্সেসে ব্যবহারকারীর রোল এবং প্রোফাইল অনুসারে নিয়ন্ত্রণ।
  2. Field-Level Security: ব্যবহারকারীর প্রোফাইল অনুযায়ী নির্দিষ্ট ফিল্ডগুলোর অ্যাক্সেস সীমাবদ্ধ করা।
  3. CRUD (Create, Read, Update, Delete) Permissions: রেকর্ডের নির্দিষ্ট CRUD অপারেশন সম্পন্ন করতে প্রয়োজনীয় অনুমতি যাচাই করা।
  4. SOQL ইনজেকশন প্রতিরোধ: ইনপুট ভ্যালিডেশনের মাধ্যমে SOQL ইনজেকশন প্রতিরোধ।
  5. With Sharing এবং Without Sharing Keywords: Apex ক্লাসে শেয়ারিং নিয়ম প্রয়োগ বা অব্যাহত করা।

Sharing Rules এবং Apex Sharing

Sharing Rules Apex ক্লাসে ব্যবহারকারী বা প্রোফাইল অনুযায়ী ডেটা এক্সেস নিয়ন্ত্রণ করে। Salesforce-এ With Sharing এবং Without Sharing কিওয়ার্ড ব্যবহার করে Apex ক্লাসে ডেটা অ্যাক্সেস নিয়ন্ত্রণ করা হয়।

  • With Sharing: ক্লাসের মধ্যে শেয়ারিং নিয়ম মেনে ডেটা অ্যাক্সেস সীমাবদ্ধ করা হয়।
  • Without Sharing: শেয়ারিং নিয়ম মেনে না চলা; এটি ক্লাসকে আরো বেশি ডেটা অ্যাক্সেস দেয়।

উদাহরণ: With Sharing

public with sharing class AccountController {
    public List<Account> getAccounts() {
        return [SELECT Id, Name FROM Account];
    }
}
  • with sharing: এখানে ক্লাসটি ব্যবহারকারীর শেয়ারিং নিয়ম মেনে Account রেকর্ড ফিল্টার করে।

Field-Level Security

Field-Level Security (FLS) Apex কোডে ফিল্ড-লেভেল অ্যাক্সেস নিয়ন্ত্রণ করে। এটি ব্যবহারকারীর প্রোফাইল অনুযায়ী নির্দিষ্ট ফিল্ডগুলো অ্যাক্সেস সীমাবদ্ধ রাখে।

উদাহরণ: Field-Level Security যাচাই

public class AccountFLS {
    public void createAccount(Account acc) {
        if (Schema.sObjectType.Account.fields.Name.isCreateable()) {
            insert acc;
        } else {
            throw new CustomException('Insufficient permission to create account name.');
        }
    }
}
  • isCreateable(): এখানে Name ফিল্ডে ব্যবহারকারী অ্যাক্সেস আছে কি না তা যাচাই করা হয়েছে।
  • Custom Exception: অনুমতি না থাকলে Exception তৈরি করা হয়েছে।

CRUD Permissions যাচাই করা

CRUD (Create, Read, Update, Delete) Permissions নিশ্চিত করে যে ব্যবহারকারী নির্দিষ্ট অবজেক্ট বা রেকর্ডে CRUD অপারেশন সম্পন্ন করার অনুমতি রাখে। Apex কোডে CRUD অনুমতি যাচাই করতে isCreateable(), isUpdateable(), isDeletable(), এবং isAccessible() ব্যবহার করা হয়।

উদাহরণ: CRUD Permissions যাচাই করা

public class AccountCRUD {
    public void updateAccount(Account acc) {
        if (Schema.sObjectType.Account.isUpdateable()) {
            update acc;
        } else {
            throw new CustomException('Insufficient permission to update account.');
        }
    }
}
  • isUpdateable(): Account অবজেক্টে ব্যবহারকারী আপডেট করার অনুমতি রাখে কি না তা যাচাই করা হয়েছে।
  • Custom Exception: অনুমতি না থাকলে Exception তৈরি করা হয়েছে।

SOQL ইনজেকশন প্রতিরোধ

SOQL ইনজেকশন হলো এমন একটি পদ্ধতি, যা অনিরাপদ ইনপুট ব্যবহার করে ডেটাবেস অ্যাটাকের সম্ভাবনা সৃষ্টি করে। SOQL ইনজেকশন প্রতিরোধে সবসময় ইনপুট স্যানিটাইজ করা উচিত এবং bind variables ব্যবহার করে ইনপুট সরাসরি SOQL স্টেটমেন্টে যুক্ত করা উচিত নয়।

উদাহরণ: SOQL ইনজেকশন প্রতিরোধ

public class AccountQuery {
    public List<Account> getAccounts(String accountName) {
        String sanitizedAccountName = String.escapeSingleQuotes(accountName);
        return [SELECT Id, Name FROM Account WHERE Name = :sanitizedAccountName];
    }
}
  • String.escapeSingleQuotes(): ইনজেকশন প্রতিরোধে ইনপুট স্যানিটাইজ করা হয়েছে।
  • Bind Variable: SOQL কুয়েরিতে Bind Variable ব্যবহার করে ইনজেকশন রোধ করা হয়েছে।

Apex Security এর অন্যান্য উপাদান

Cross-Site Scripting (XSS) প্রতিরোধ: HTML Encode ব্যবহার করে স্ক্রিপ্ট ইনজেকশন রোধ করুন।

String sanitizedInput = EncodingUtil.urlEncode(userInput, 'UTF-8');

URL Redirection Validation: কোনো URL রিডাইরেকশন করার সময় URL ভ্যালিডেট করে ইনজেকশন রোধ করুন।

Exception Handling এবং Logging: Exception Handling নিশ্চিত করুন এবং অনুমোদিত ডেটা বা তথ্য লগে প্রদর্শন করুন, যা Unauthorized Access প্রতিরোধে সহায়ক।

Use Custom Permissions: Custom Permissions ব্যবহার করে নির্দিষ্ট কোড বা ফিচারে অ্যাক্সেস নিয়ন্ত্রণ করুন।

Encryption Techniques ব্যবহার করুন: সংবেদনশীল ডেটা নিরাপদ রাখতে Salesforce-এ Encryption Technique ব্যবহার করুন।


Apex Security এর ভালো অনুশীলন

Field-Level এবং CRUD Permissions যাচাই করুন: প্রতিটি SOQL ও DML অপারেশন করার আগে FLS এবং CRUD অনুমতি যাচাই করুন।

With Sharing ব্যবহার করুন: যেখানে প্রয়োজন সেখানে With Sharing ব্যবহার করুন, যাতে Apex ক্লাস শেয়ারিং নিয়ম মেনে চলে।

Input Sanitization এবং Validation: ইনপুট স্যানিটাইজ করে ইনজেকশন প্রতিরোধ নিশ্চিত করুন এবং ব্যবহারকারীর ইনপুট যাচাই করুন।

Session Management: গুরুত্বপূর্ণ API কল এবং থার্ড-পার্টি ইন্টিগ্রেশনের জন্য সেশন এবং Authorization Token ব্যবহারে সতর্ক থাকুন।

Testing এবং Code Review: Code Review এবং Security Testing এর মাধ্যমে কোডের সুরক্ষা নিশ্চিত করুন।


সারসংক্ষেপ

Apex Security Salesforce প্ল্যাটফর্মে ডেটা সুরক্ষা, ব্যবহারকারীর অ্যাক্সেস নিয়ন্ত্রণ, এবং ডেটা ইনজেকশন প্রতিরোধ নিশ্চিত করতে সাহায্য করে। Apex Security টেকনিক যেমন Sharing Rules, Field-Level Security, CRUD Permissions, এবং SOQL Injection প্রতিরোধ করে Salesforce অ্যাপ্লিকেশনকে আরো নিরাপদ এবং নির্ভরযোগ্য করে তোলে।

common.content_added_by

Apex Security Best Practices

262
262

Salesforce-এ Apex Security Best Practices অনুসরণ করে অ্যাপ্লিকেশনের ডেটা, লজিক, এবং ব্যবহারকারীর নিরাপত্তা নিশ্চিত করা হয়। Apex কোড নিরাপদভাবে লিখতে হলে কিছু নির্দিষ্ট পদ্ধতি এবং নিয়ম মেনে চলা অত্যন্ত গুরুত্বপূর্ণ, যা ডেটার নিরাপত্তা ও অ্যাপ্লিকেশনের কার্যক্ষমতা বৃদ্ধি করে।


Apex Security Best Practices

With Sharing এবং Without Sharing কিওয়ার্ড ব্যবহার করুন

  • With Sharing: Apex ক্লাসে with sharing ব্যবহার করলে ক্লাসটি বর্তমানে লগইন করা ব্যবহারকারীর শেয়ারিং নিয়ম মেনে চলে।
  • Without Sharing: without sharing ব্যবহার করলে শেয়ারিং নিয়ম উপেক্ষা করা হয়, তবে এটি ব্যবহার করার সময় খুব সতর্ক থাকতে হবে।
  • উদাহরণ:
public with sharing class AccountController {
    // কোড শেয়ারিং নিয়ম মেনে চলবে
}

SOQL ইনজেকশন থেকে বাঁচুন

  • SOQL ইনজেকশন হলো এমন একটি আক্রমণ পদ্ধতি যেখানে ডেটাবেসের সাথে অপ্রত্যাশিত ম্যালিসিয়াস ইনপুট দিয়ে কোড এক্সিকিউট করা হয়।
  • Escape Bind Variables: ব্যবহারকারীর ইনপুট সরাসরি SOQL কুয়েরিতে ব্যবহার না করে bind variables ব্যবহার করুন।
  • উদাহরণ:
String accountName = 'Acme';
Account acc = [SELECT Id FROM Account WHERE Name = :accountName];

CRUD এবং FLS (Field Level Security) চেক করুন

  • CRUD (Create, Read, Update, Delete): Apex কোডে রেকর্ড এক্সেস করার আগে CRUD অনুমোদন চেক করুন, যাতে ব্যবহারকারীর যথাযথ অনুমোদন রয়েছে কিনা তা নিশ্চিত হয়।
  • FLS (Field Level Security): ফিল্ডে এক্সেস করার আগে FLS চেক করে নিশ্চিত করুন যে ব্যবহারকারী সেই ফিল্ড দেখতে বা সম্পাদনা করতে পারে।
  • উদাহরণ:
if (Schema.sObjectType.Account.isAccessible()) {
    Account acc = [SELECT Id, Name FROM Account LIMIT 1];
}

Insecure Direct References (IDOR) এড়িয়ে চলুন

  • IDOR আক্রমণ এড়াতে শুধুমাত্র ব্যবহারকারীর অনুমোদিত রেকর্ডগুলো এক্সেস করতে দিন। ব্যবহারকারীর কাছে যে রেকর্ডগুলো এক্সেস করার অনুমতি নেই সেগুলো থেকে দূরে রাখুন।
  • User Context চেক করুন: ব্যবহারকারীর প্রয়োজনীয় অনুমতি আছে কিনা তা চেক করুন।

Avoid Hardcoding Sensitive Data

  • সেনসিটিভ তথ্য যেমন API Keys, পার্সওয়ার্ড ইত্যাদি হার্ডকোড করা থেকে বিরত থাকুন।
  • Custom Settings বা Custom Metadata ব্যবহার করে সংবেদনশীল তথ্য সেভ করুন।

Use Named Credentials for External Services Integration

  • Named Credentials ব্যবহার করে নিরাপদভাবে এক্সটার্নাল সার্ভিসের সাথে সংযোগ করুন, যা ব্যবহারকারীর প্রমাণীকরণ তথ্য এবং সার্ভিস এন্ডপয়েন্ট নিরাপদ রাখে।
  • উদাহরণ:
HttpRequest req = new HttpRequest();
req.setEndpoint('callout:MyNamedCredential/api/endpoint');

Exception Handling যুক্ত করুন

  • Exception Handling ব্যবহার করে ত্রুটির উপযুক্ত বার্তা প্রদান করুন এবং সংবেদনশীল ডেটা লিক হওয়া থেকে রক্ষা করুন।
  • Generic Error Message প্রদান করুন: Exception মেসেজে সংবেদনশীল ডেটা এড়িয়ে চলুন।
  • উদাহরণ:
try {
    // কোড
} catch (DmlException e) {
    System.debug('An error occurred: ' + e.getMessage());
}

Avoid Using "SeeAllData=true" in Test Classes

  • SeeAllData=true ব্যবহার করে মূল ডেটাবেস অ্যাক্সেস করা হয়, যা নিরাপত্তা ঝুঁকি তৈরি করে।
  • টেস্ট ক্লাসে SeeAllData=false ব্যবহার করুন এবং টেস্ট ডেটা নিজে তৈরি করুন।

Prevent Cross-Site Scripting (XSS)

  • Visualforce Page-এ ইনপুট এবং আউটপুটের সময় XSS আক্রমণ থেকে রক্ষা পাওয়ার জন্য HTML encode ব্যবহার করুন।
  • apex:outputText ব্যবহার করুন, যা HTML encode করে ইনপুট আউটপুট প্রদর্শন করে।
  • উদাহরণ:
<apex:outputText value="{!account.Name}" escape="true"/>

Avoid Excessive Debug Logging in Production

  • প্রোডাকশন এনভায়রনমেন্টে অতিরিক্ত ডিবাগ লগিং ব্যবহার করা এড়িয়ে চলুন, যা সংবেদনশীল তথ্য লিক করতে পারে।

সারসংক্ষেপ

Apex Security Best Practices অনুসরণ করে Salesforce অ্যাপ্লিকেশন সুরক্ষিত এবং নির্ভরযোগ্য রাখা যায়। Sharing কিওয়ার্ড, SOQL ইনজেকশন থেকে রক্ষা, CRUD এবং FLS চেক, Named Credentials, এবং Exception Handling-এর মতো সিকিউরিটি পদ্ধতি ব্যবহার করে অ্যাপ্লিকেশনকে নিরাপদ ও কার্যক্ষম রাখা সম্ভব হয়। Salesforce ডেভেলপমেন্টে এই সিকিউরিটি প্র্যাকটিস অনুসরণ করা একটি ভালো এবং প্রয়োজনীয় অভ্যাস।

common.content_added_by

Object-Level, Field-Level, এবং Record-Level Security

248
248

Object-Level, Field-Level, এবং Record-Level Security Salesforce-এ ডেটা অ্যাক্সেস নিয়ন্ত্রণের তিনটি স্তর, যা ব্যবহারকারীর প্রোফাইল, ভূমিকা, এবং অনুমতি অনুযায়ী ডেটা অ্যাক্সেস নিয়ন্ত্রণ করে। এই তিনটি স্তরের নিরাপত্তা নিশ্চিত করে যে ব্যবহারকারী শুধু প্রয়োজনীয় এবং অনুমোদিত ডেটা দেখতে এবং অ্যাক্সেস করতে পারবেন।


1. Object-Level Security

Object-Level Security ব্যবহারকারীর নির্দিষ্ট অবজেক্টে (যেমন Account, Contact, Opportunity ইত্যাদি) অ্যাক্সেস নির্ধারণ করে। এই নিরাপত্তা স্তরটি নির্ধারণ করে যে ব্যবহারকারী কোন অবজেক্টে CRUD (Create, Read, Update, Delete) অপারেশন করতে পারবেন।

Object-Level Security কনফিগার করার উপায়

  • Profiles and Permission Sets: প্রোফাইল এবং পারমিশন সেট ব্যবহার করে Object-Level Security কনফিগার করা হয়। এতে নির্দিষ্ট অবজেক্টে অনুমোদন ও অ্যাক্সেস নিয়ন্ত্রণ করা যায়।

Apex Code-এ Object-Level Security যাচাই

Apex কোডে Object-Level Security যাচাই করতে Schema.sObjectType.<Object>.isAccessible(), isCreateable(), isUpdateable(), এবং isDeletable() মেথড ব্যবহার করা হয়।

উদাহরণ: Object-Level Security যাচাই

public class AccountService {
    public void createAccount(Account acc) {
        if (Schema.sObjectType.Account.isCreateable()) {
            insert acc;
        } else {
            throw new CustomException('Insufficient permissions to create Account.');
        }
    }
}
  • isCreateable(): এখানে যাচাই করা হয়েছে যে ব্যবহারকারীর Account অবজেক্টে রেকর্ড তৈরি করার অনুমতি আছে কি না।

2. Field-Level Security

Field-Level Security নির্দিষ্ট ফিল্ডের উপর অ্যাক্সেস নিয়ন্ত্রণ করে, যা নির্ধারণ করে ব্যবহারকারী কোন ফিল্ড দেখতে, তৈরি করতে, আপডেট করতে পারবেন। এটি Object-Level Security এর উপর একটি বাড়তি স্তর যা ফিল্ড ভিত্তিক অ্যাক্সেস নিয়ন্ত্রণ করে।

Field-Level Security কনফিগার করার উপায়

  • Profiles and Permission Sets: প্রোফাইল এবং পারমিশন সেটের মাধ্যমে Field-Level Security কনফিগার করা যায়, যা নির্দিষ্ট ফিল্ডগুলোতে অ্যাক্সেস প্রদান করে।

Apex Code-এ Field-Level Security যাচাই

Apex কোডে Field-Level Security যাচাই করতে Schema.sObjectType.<Object>.fields.<Field>.isAccessible(), isCreateable(), এবং isUpdateable() মেথড ব্যবহার করা হয়।

উদাহরণ: Field-Level Security যাচাই

public class AccountService {
    public void updateAccountIndustry(Account acc) {
        if (Schema.sObjectType.Account.fields.Industry.isUpdateable()) {
            update acc;
        } else {
            throw new CustomException('Insufficient permissions to update Industry field.');
        }
    }
}
  • isUpdateable(): এখানে যাচাই করা হয়েছে যে ব্যবহারকারীর Account অবজেক্টের Industry ফিল্ড আপডেট করার অনুমতি আছে কি না।

3. Record-Level Security

Record-Level Security নির্দিষ্ট রেকর্ডের উপর অ্যাক্সেস নিয়ন্ত্রণ করে। এটি নির্ধারণ করে ব্যবহারকারী কোন রেকর্ড দেখতে, সম্পাদনা করতে বা মুছে ফেলতে পারবেন। Record-Level Security ডেটা শেয়ারিং মডেলের উপর ভিত্তি করে কাজ করে এবং প্রোফাইল, পারমিশন সেট, বা রোল হায়ারার্কির উপর নির্ভর করে।

Record-Level Security কনফিগার করার উপায়

  • Organization-Wide Defaults (OWD): প্রতিটি অবজেক্টের জন্য ডিফল্ট অ্যাক্সেস স্তর সেট করে, যা নির্ধারণ করে ব্যবহারকারী কোন রেকর্ড দেখতে বা সম্পাদনা করতে পারবেন।
  • Role Hierarchies: উর্ধ্বতন কর্তৃপক্ষের জন্য নিচের স্তরের রেকর্ড অ্যাক্সেসের অনুমতি প্রদান করে।
  • Sharing Rules: নির্দিষ্ট ব্যবহারকারী বা রোলের জন্য রেকর্ড শেয়ারিং রুলস তৈরি করা যায়।
  • Manual Sharing: ব্যবহারকারীর নিজস্ব রেকর্ড অন্য ব্যবহারকারীর সাথে শেয়ার করার অনুমতি।

Apex Code-এ Record-Level Security যাচাই

Record-Level Security যাচাই করতে Apex ক্লাসে with sharing বা without sharing কিওয়ার্ড ব্যবহার করা হয়।

  • with sharing: Apex ক্লাসে শেয়ারিং নিয়ম মেনে চলার নির্দেশ দেয়।
  • without sharing: শেয়ারিং নিয়ম এড়িয়ে সমস্ত রেকর্ডে অ্যাক্সেস প্রদান করে।

উদাহরণ: Record-Level Security

public with sharing class AccountService {
    public List<Account> getUserAccounts() {
        return [SELECT Id, Name FROM Account];
    }
}
  • with sharing: এখানে with sharing কিওয়ার্ড ব্যবহার করে নিশ্চিত করা হয়েছে যে ক্লাসটি শেয়ারিং নিয়ম মেনে চলবে এবং শুধু ব্যবহারকারীর অনুমোদিত রেকর্ডগুলোই অ্যাক্সেস করতে পারবে।

Object-Level, Field-Level, এবং Record-Level Security এর পার্থক্য

নিরাপত্তা স্তরউদ্দেশ্যকনফিগারেশন উপায়Apex কোড যাচাই
Object-Level Securityঅবজেক্টের উপর CRUD অপারেশন নিয়ন্ত্রণ করেProfiles এবং Permission SetsisCreateable(), isAccessible(), isUpdateable()
Field-Level Securityনির্দিষ্ট ফিল্ডে এক্সেস নিয়ন্ত্রণ করেProfiles এবং Permission SetsisAccessible(), isCreateable(), isUpdateable()
Record-Level Securityনির্দিষ্ট রেকর্ডে এক্সেস নিয়ন্ত্রণ করেOWD, Role Hierarchies, Sharing Ruleswith sharing, without sharing

Apex কোডে Security Best Practices

Object-Level এবং Field-Level Security যাচাই করুন: প্রতিটি SOQL এবং DML অপারেশনের আগে Object-Level এবং Field-Level Security যাচাই করুন।

if (Schema.sObjectType.Account.isAccessible() && Schema.sObjectType.Account.fields.Name.isAccessible()) {
    Account acc = [SELECT Id, Name FROM Account LIMIT 1];
}

with sharing ব্যবহার করুন: যেখানে সম্ভব with sharing ব্যবহার করুন, যাতে ক্লাসে শেয়ারিং নিয়ম মেনে ডেটা অ্যাক্সেস নিশ্চিত করা যায়।

Exception Handling: যথাযথ Exception Handling যুক্ত করুন এবং অনুমতি না থাকলে ব্যবহারকারীকে Custom Error Message প্রদান করুন।

Minimal Permissions: প্রোফাইল এবং পারমিশন সেটে ন্যূনতম প্রয়োজনীয় পারমিশন প্রদান করুন।

Custom Permissions ব্যবহার করুন: কোডের নির্দিষ্ট অংশে এক্সেস নিয়ন্ত্রণের জন্য Custom Permissions ব্যবহার করতে পারেন।


সারসংক্ষেপ

Object-Level, Field-Level, এবং Record-Level Security Salesforce প্ল্যাটফর্মে ডেটা অ্যাক্সেস নিয়ন্ত্রণের বিভিন্ন স্তর, যা ডেটা সুরক্ষা নিশ্চিত করে। প্রোফাইল, পারমিশন সেট, এবং শেয়ারিং নিয়ম ব্যবহার করে প্রতিটি স্তরের নিরাপত্তা নিশ্চিত করা হয়। Object-Level Security নির্দিষ্ট অবজেক্টে CRUD অ্যাক্সেস নিয়ন্ত্রণ করে, Field-Level Security নির্দিষ্ট ফিল্ডের উপর ভিত্তি করে এক্সেস নিয়ন্ত্রণ করে, এবং Record-Level Security নির্দিষ্ট রেকর্ডের উপর ভিত্তি করে ডেটা এক্সেস নিয়ন্ত্রণ নিশ্চিত করে। নিরাপদ ও সুরক্ষিত কোড নিশ্চিত করতে এই সিকিউরিটি নিয়মগুলো মেনে Apex কোড লিখতে হবে।

common.content_added_by

CRUD এবং FLS চেকিং

215
215

CRUD (Create, Read, Update, Delete) এবং FLS (Field Level Security) চেকিং Salesforce-এ একটি নিরাপদ এবং সুরক্ষিত অ্যাপ্লিকেশন তৈরি করার জন্য অপরিহার্য। Apex কোডের মধ্যে CRUD এবং FLS চেক ব্যবহার করে নিশ্চিত করা হয় যে ব্যবহারকারীর কাছে ডেটা এবং ফিল্ডের উপর যথাযথ অনুমোদন রয়েছে কিনা। এর ফলে Salesforce অ্যাপ্লিকেশনে সঠিক নিরাপত্তা নিশ্চিত হয় এবং অপ্রত্যাশিত ডেটা লিক বা নিরাপত্তা ঝুঁকি কমানো যায়।


CRUD চেকিং

CRUD চেকিং ব্যবহার করে Apex কোডে যাচাই করা হয় যে, ব্যবহারকারী নির্দিষ্ট Object-এর উপর Create, Read, Update, বা Delete অনুমোদন রয়েছে কিনা। এটি সুরক্ষা নিশ্চিত করতে গুরুত্বপূর্ণ, কারণ একটি রেকর্ড বা অবজেক্টের উপর যথাযথ অনুমোদন না থাকলে ব্যবহারকারী সেই রেকর্ডটি অ্যাক্সেস বা পরিবর্তন করতে পারবে না।

CRUD চেকিং উদাহরণ

নীচের উদাহরণে Account অবজেক্টে CRUD অনুমোদন চেক করা হয়েছে।

if (Schema.sObjectType.Account.isAccessible()) {
    Account acc = [SELECT Id, Name FROM Account LIMIT 1];
    System.debug('Account accessible to current user');
}

if (Schema.sObjectType.Account.isCreateable()) {
    Account newAcc = new Account(Name = 'Test Account');
    insert newAcc;
    System.debug('Account created');
}

if (Schema.sObjectType.Account.isUpdateable()) {
    Account acc = [SELECT Id FROM Account LIMIT 1];
    acc.Name = 'Updated Account Name';
    update acc;
    System.debug('Account updated');
}

if (Schema.sObjectType.Account.isDeletable()) {
    Account acc = [SELECT Id FROM Account LIMIT 1];
    delete acc;
    System.debug('Account deleted');
}
  • isAccessible(): চেক করে ব্যবহারকারী নির্দিষ্ট অবজেক্ট পড়তে পারে কিনা।
  • isCreateable(): চেক করে ব্যবহারকারী নতুন রেকর্ড তৈরি করতে পারে কিনা।
  • isUpdateable(): চেক করে ব্যবহারকারী রেকর্ড আপডেট করতে পারে কিনা।
  • isDeletable(): চেক করে ব্যবহারকারী রেকর্ড ডিলিট করতে পারে কিনা।

FLS (Field Level Security) চেকিং

FLS চেকিং ব্যবহার করে Apex কোডে যাচাই করা হয় যে, ব্যবহারকারী নির্দিষ্ট Field অ্যাক্সেস করার অনুমতি রাখে কিনা। এটি নিশ্চিত করে যে ব্যবহারকারী শুধুমাত্র অনুমোদিত ফিল্ড দেখতে বা সম্পাদনা করতে পারে এবং অপ্রয়োজনীয় বা সংবেদনশীল ফিল্ডে অ্যাক্সেস পাবে না।

FLS চেকিং উদাহরণ

নীচে Account অবজেক্টে Name এবং Industry ফিল্ডের জন্য FLS চেক করা হয়েছে।

Account acc = [SELECT Id, Name, Industry FROM Account LIMIT 1];

// Field Level Security চেক
if (Schema.sObjectType.Account.fields.Name.isAccessible()) {
    System.debug('Account Name: ' + acc.Name);
}

if (Schema.sObjectType.Account.fields.Industry.isUpdateable()) {
    acc.Industry = 'Technology';
    update acc;
    System.debug('Account Industry updated');
}
  • isAccessible(): চেক করে ব্যবহারকারী ফিল্ড দেখতে পারে কিনা।
  • isUpdateable(): চেক করে ব্যবহারকারী ফিল্ড আপডেট করতে পারে কিনা।
  • isCreateable(): চেক করে ব্যবহারকারী ফিল্ডে নতুন ভ্যালু অ্যাসাইন করতে পারে কিনা (যখন নতুন রেকর্ড তৈরি করা হয়)।

কেন CRUD এবং FLS চেকিং গুরুত্বপূর্ণ?

নিরাপত্তা নিশ্চিত করা: CRUD এবং FLS চেকিং নিশ্চিত করে যে ব্যবহারকারীর কাছে কেবলমাত্র অনুমোদিত ডেটা এবং ফিল্ডের এক্সেস রয়েছে, যা ডেটা লিক হওয়া থেকে রক্ষা করে।

অ্যাক্সেস কন্ট্রোল বজায় রাখা: ব্যবহারকারীর অনুমতি অনুযায়ী ডেটা এবং ফিল্ডে এক্সেস কন্ট্রোল বজায় রাখে, যা সার্ভারের কার্যক্ষমতা উন্নত করে।

SOX এবং HIPAA-এর মতো নীতি অনুসরণ করা: অনেক কোম্পানি নিয়ন্ত্রণ এবং সুরক্ষার জন্য সিকিউরিটি নীতি অনুসরণ করে। CRUD এবং FLS চেকিং নিশ্চিত করে যে এসব নীতির শর্ত পূরণ হচ্ছে।

কোডের স্থায়িত্ব: অনুমোদিত ডেটা এবং ফিল্ডে এক্সেসের মাধ্যমে কোড আরও স্থিতিশীল এবং নির্ভরযোগ্য হয়।


ভালো অনুশীলন

CRUD এবং FLS চেকিং সর্বদা যুক্ত করুন: Apex কোডে CRUD এবং FLS চেকিং অন্তর্ভুক্ত করুন, বিশেষ করে যেখানে SOQL, DML, বা Field Access ব্যবহৃত হয়েছে।

গভর্নর লিমিট মেনে চলুন: CRUD এবং FLS চেকিং করার সময় গভর্নর লিমিটের মধ্যে থেকে কোড অপ্টিমাইজ করার চেষ্টা করুন।

Test Classes-এ সিকিউরিটি চেকিং অন্তর্ভুক্ত করুন: CRUD এবং FLS সিকিউরিটি চেকিং অ্যাসার্ট করার জন্য Test Class তৈরি করুন।

Sensitive Data হ্যান্ডলিং-এর ক্ষেত্রে বিশেষ সতর্কতা অবলম্বন করুন: সেনসিটিভ ফিল্ড যেমন Social Security Number (SSN), API Keys ইত্যাদি হ্যান্ডল করার সময় FLS চেকিং নিশ্চিত করুন।


সারসংক্ষেপ

CRUD এবং FLS চেকিং Salesforce-এ সুরক্ষিত অ্যাপ্লিকেশন তৈরি করতে অপরিহার্য, যা ব্যবহারকারীর অনুমোদন অনুযায়ী ডেটা এবং ফিল্ডের অ্যাক্সেস নিয়ন্ত্রণ করে। Apex কোডে CRUD এবং FLS চেকিং অন্তর্ভুক্ত করে ডেটার নিরাপত্তা, অ্যাপ্লিকেশন কার্যক্ষমতা, এবং নির্ভরযোগ্যতা নিশ্চিত করা যায়। Salesforce ডেভেলপমেন্টে CRUD এবং FLS চেকিং ব্যবহার করা একটি ভালো অভ্যাস এবং একটি নিরাপদ অ্যাপ্লিকেশন তৈরির অন্যতম গুরুত্বপূর্ণ পদক্ষেপ।

common.content_added_by

Apex Sharing Rules এবং Security Considerations

268
268

Apex Sharing Rules এবং Security Considerations Salesforce-এ ডেটা সুরক্ষার জন্য গুরুত্বপূর্ণ। Sharing Rules Apex কোডে ব্যবহারকারীর রোল, প্রোফাইল, এবং নির্দিষ্ট শেয়ারিং নিয়ম অনুযায়ী রেকর্ডের অ্যাক্সেস নিয়ন্ত্রণ করে, যা নিশ্চিত করে যে ব্যবহারকারী শুধুমাত্র অনুমোদিত ডেটা দেখতে ও অ্যাক্সেস করতে পারবে। Apex ক্লাসে শেয়ারিং নিয়মগুলো ব্যবহারের সময় নিরাপত্তার বিষয়গুলো বিবেচনা করা গুরুত্বপূর্ণ।


Apex Sharing Rules

Sharing Rules Apex কোডে নির্দিষ্ট রেকর্ড বা ডেটার উপর অ্যাক্সেস নিয়ন্ত্রণ করতে সহায়ক। Apex ক্লাসে With Sharing এবং Without Sharing কিওয়ার্ড ব্যবহার করে শেয়ারিং নিয়ম মেনে চলা বা এড়ানো সম্ভব হয়।

1. With Sharing

With Sharing কিওয়ার্ড ব্যবহার করে Apex ক্লাসে শেয়ারিং নিয়ম মেনে চলা নিশ্চিত করা হয়, যা ব্যবহারকারীর নির্ধারিত শেয়ারিং নিয়ম এবং রোল ভিত্তিক অ্যাক্সেস সীমাবদ্ধতা অনুযায়ী ডেটা ফিল্টার করে।

উদাহরণ: With Sharing

public with sharing class AccountService {
    public List<Account> getAccounts() {
        return [SELECT Id, Name FROM Account];
    }
}
  • with sharing: এখানে শেয়ারিং নিয়ম অনুসরণ করা হয়েছে, যাতে ব্যবহারকারী শুধুমাত্র অনুমোদিত Account রেকর্ডগুলো দেখতে পারেন।

2. Without Sharing

Without Sharing কিওয়ার্ড ব্যবহার করে Apex ক্লাসে শেয়ারিং নিয়ম এড়িয়ে যাওয়া হয়, যা ক্লাসকে সমস্ত রেকর্ডে অ্যাক্সেস দেয়। এটি সাধারণত তখন ব্যবহার করা হয়, যখন অ্যাডমিনিস্ট্রেটিভ কাজ বা রেকর্ড ফিল্টারিং প্রয়োজন হয় না।

উদাহরণ: Without Sharing

public without sharing class AdminService {
    public List<Account> getAllAccounts() {
        return [SELECT Id, Name FROM Account];
    }
}
  • without sharing: এখানে শেয়ারিং নিয়ম অনুসরণ না করে সমস্ত Account রেকর্ডে অ্যাক্সেস প্রদান করা হয়েছে।

Sharing Rules ব্যবহার করার প্রধান ক্ষেত্র

  1. ব্যবহারকারীর অ্যাক্সেস সীমাবদ্ধ রাখা: With Sharing ব্যবহার করে ব্যবহারকারীর জন্য ডেটা ফিল্টার করা যায়।
  2. রোল এবং হায়ারার্কি ভিত্তিক শেয়ারিং: With Sharing ব্যবহার করে রোল ভিত্তিক শেয়ারিং নিশ্চিত করা যায়।
  3. অ্যাডমিনিস্ট্রেটিভ কাজ: Without Sharing কিওয়ার্ড ব্যবহার করে অ্যাডমিনিস্ট্রেটিভ কাজ সম্পন্ন করা যায় যেখানে পুরো ডেটা অ্যাক্সেস প্রয়োজন।

Security Considerations

Apex কোডের নিরাপত্তা নিশ্চিত করতে বিভিন্ন Security Considerations মেনে চলা উচিত, যাতে ডেটা সুরক্ষা নিশ্চিত হয় এবং ইনজেকশন বা ডেটা লিক প্রতিরোধ করা যায়।

1. Object-Level এবং Field-Level Security যাচাই করা

প্রতিটি SOQL এবং DML অপারেশনের আগে Object-Level এবং Field-Level Security যাচাই করা উচিত, যাতে ব্যবহারকারীর অনুমোদিত ডেটা ছাড়া অন্য ডেটা অ্যাক্সেস না হয়।

উদাহরণ: Object-Level এবং Field-Level Security যাচাই

public class AccountService {
    public void updateAccountName(Account acc) {
        if (Schema.sObjectType.Account.isUpdateable() && Schema.sObjectType.Account.fields.Name.isUpdateable()) {
            update acc;
        } else {
            throw new CustomException('Insufficient permissions to update Account Name.');
        }
    }
}

2. SOQL ইনজেকশন প্রতিরোধ

SOQL ইনজেকশন প্রতিরোধ করতে ইনপুট স্যানিটাইজেশন এবং Bind Variables ব্যবহার করা উচিত। ইনপুট সরাসরি SOQL স্টেটমেন্টে যুক্ত না করে, Bind Variables ব্যবহার করা সুরক্ষিত।

উদাহরণ: SOQL ইনজেকশন প্রতিরোধ

public class AccountQuery {
    public List<Account> getAccounts(String accountName) {
        String sanitizedAccountName = String.escapeSingleQuotes(accountName);
        return [SELECT Id, Name FROM Account WHERE Name = :sanitizedAccountName];
    }
}

3. CRUD Permissions যাচাই

CRUD Permissions যাচাই করা নিশ্চিত করে যে ব্যবহারকারী নির্দিষ্ট অবজেক্ট বা ফিল্ডে অ্যাক্সেস অনুমোদিত কি না। Apex কোডে CRUD অনুমতি যাচাই করতে isCreateable(), isUpdateable(), isDeletable(), এবং isAccessible() মেথড ব্যবহার করা হয়।

উদাহরণ: CRUD Permissions যাচাই করা

public class AccountCRUD {
    public void deleteAccount(Account acc) {
        if (Schema.sObjectType.Account.isDeletable()) {
            delete acc;
        } else {
            throw new CustomException('Insufficient permissions to delete Account.');
        }
    }
}

4. With Sharing এবং Without Sharing এর প্রয়োগের সময় সতর্কতা

  • With Sharing: ব্যবহারের সময় নিশ্চিত করুন, এটি ব্যবহারকারীর অ্যাক্সেস সীমাবদ্ধ রাখছে এবং প্রয়োজন অনুযায়ী ফিল্টার করা হচ্ছে।
  • Without Sharing: শুধুমাত্র অ্যাডমিনিস্ট্রেটিভ কাজ বা যেখানে পূর্ণ অ্যাক্সেসের প্রয়োজন, সেখানে ব্যবহার করা উচিত। এটি রেকর্ড-ভিত্তিক সুরক্ষার জন্য ঝুঁকিপূর্ণ হতে পারে।

5. Exception Handling এবং Logging

Exception Handling এবং যথাযথ Logging সিস্টেম ব্যবহার করে নিশ্চিত করুন যে নিরাপত্তা লঙ্ঘন, ইনজেকশন অ্যাটাক বা ডেটা লিক সনাক্ত করা সহজ হয়।

উদাহরণ: Exception Handling

public class AccountService {
    public List<Account> getAccounts() {
        try {
            return [SELECT Id, Name FROM Account];
        } catch (Exception e) {
            System.debug('Error: ' + e.getMessage());
            throw new CustomException('Unable to retrieve Accounts.');
        }
    }
}

Apex Sharing এবং Security Considerations: Best Practices

with sharing ব্যবহার করুন: যতটা সম্ভব with sharing ব্যবহার করুন এবং শুধুমাত্র প্রয়োজন হলে without sharing ব্যবহার করুন।

CRUD এবং Field-Level Security যাচাই করুন: প্রতিটি DML এবং SOQL অপারেশনের আগে CRUD এবং Field-Level Security যাচাই করা উচিত।

Input Sanitization নিশ্চিত করুন: ইনপুট ভ্যালিডেশন এবং স্যানিটাইজেশন নিশ্চিত করে ইনজেকশন প্রতিরোধ করুন।

Exception Handling এবং Logging: কোডের প্রতিটি গুরুত্বপূর্ণ অংশে Exception Handling এবং যথাযথ Logging নিশ্চিত করুন।

Custom Permissions ব্যবহার করুন: কাস্টম পারমিশন ব্যবহার করে নির্দিষ্ট ফিচারের জন্য ব্যবহারকারীর অ্যাক্সেস নিয়ন্ত্রণ করুন।

Minimal Permissions: প্রোফাইল এবং পারমিশন সেটে ন্যূনতম প্রয়োজনীয় পারমিশন প্রদান করুন।


সারসংক্ষেপ

Apex Sharing Rules ব্যবহারকারীর জন্য নির্দিষ্ট ডেটা এক্সেস নিয়ন্ত্রণ করতে সহায়ক। With Sharing এবং Without Sharing কিওয়ার্ড ব্যবহার করে Apex ক্লাসে শেয়ারিং নিয়ম মেনে চলা বা এড়ানো যায়। একই সাথে, Object-Level, Field-Level, এবং Record-Level Security যাচাই, SOQL ইনজেকশন প্রতিরোধ, এবং CRUD এবং ফিল্ড পারমিশন যাচাই করার মাধ্যমে Apex কোডের নিরাপত্তা নিশ্চিত করা যায়। Proper Exception Handling এবং Logging ব্যবস্থা যুক্ত করে ডেটা সুরক্ষা এবং নির্ভরযোগ্যতা বজায় রাখা সম্ভব।

এই নিরাপত্তা নিয়মগুলো মেনে চলে Salesforce অ্যাপ্লিকেশনকে আরও নিরাপদ ও নির্ভরযোগ্য করে তোলা যায়।

common.content_added_by
টপ রেটেড অ্যাপ

স্যাট অ্যাকাডেমী অ্যাপ

আমাদের অল-ইন-ওয়ান মোবাইল অ্যাপের মাধ্যমে সীমাহীন শেখার সুযোগ উপভোগ করুন।

ভিডিও
লাইভ ক্লাস
এক্সাম
ডাউনলোড করুন
Promotion